package cn.com.bluemoon.daps.model.service;

import cn.com.bluemoon.daps.common.domain.ResultBean;
import cn.com.bluemoon.daps.common.enums.DatabaseType;
import cn.com.bluemoon.daps.common.mp.IBmService;
import cn.com.bluemoon.daps.model.entity.DapDataModel;
import cn.com.bluemoon.daps.model.entity.DapDataModelRecord;
import cn.com.bluemoon.daps.model.vo.SearchModelApplicationVo;
import cn.com.bluemoon.daps.model.vo.SearchModelVersionVo;
import cn.com.bluemoon.daps.standard.dto.ApplicationModelDto;
import cn.com.bluemoon.daps.system.entity.DapSystemDatasource;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * <p>
 * 申请发布审批状态表 服务类
 * </p>
 *
 * @author admin
 * @since 2020-08-03
 */
public interface DapDataModelRecordService extends IBmService<DapDataModelRecord> {

    /**
     * 发布列表
     * @param application
     * @return
     */
    IPage<ApplicationModelDto> getList(SearchModelApplicationVo application, Integer applicationType);

    /**
     * 单个模型申请发布
     * @param recordId
     */
    ResultBean<Boolean> singleModelApplicationRelease(String recordId, String desc);

    /**
     * 撤销
     * @param modelId
     * @param recordId
     */
    ResultBean<Boolean> cancelRelease(String modelId, String recordId);

    /**
     * 不通过发布
     * @param recordId
     */
    void unPass(String recordId);

    /**
     * 通过发布
     * @param recordId
     */
    ResultBean<String> pass(String recordId, String modelId, DatabaseType databaseType, Boolean isMenAuto);

    /**
     * v1.2
     * @param modelId
     * @param databaseType
     * @return
     */
    ResultBean<Boolean> publishPgOrHiveModel(String modelId, DatabaseType databaseType, String modelAdmin);

    /**
     *
     * @param dapDataModel
     * @param dapSystemDatasource
     * @param
     * @return
     */
    ResultBean<Boolean> publishMysqlModel(DapDataModel dapDataModel, DapSystemDatasource dapSystemDatasource);

    /**
     * 查询审批记录
     * @return
     */
    List<DapDataModelRecord> getRecord(String modelId);

    /**
     * 根据模型id获取模型最新发布的时间
     *
     * @param modelId 模型id
     * @return 最新发布的时间
     */
    Optional<LocalDateTime> findMaxReleaseTimeByModelId(String modelId);

    /**
     * 查询处于审批状态的记录
     * @param modelId
     * @return
     */
    boolean getUnRelease(String modelId);

    /**
     * 获取模型版本历史记录列表
     * @param vo
     * @return
     */
    IPage<DapDataModelRecord> getVersionRecord(SearchModelVersionVo vo);

}
